/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.sapra.echo.Dispersion2;

import com.itextpdf.text.pdf.codec.Base64.OutputStream;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import nextapp.echo2.app.Alignment;
import nextapp.echo2.app.ApplicationInstance;
import nextapp.echo2.app.Border;
import nextapp.echo2.app.Button;
import nextapp.echo2.app.Color;
import nextapp.echo2.app.Column;
import nextapp.echo2.app.ContentPane;
import nextapp.echo2.app.Extent;
import nextapp.echo2.app.FillImage;
import nextapp.echo2.app.FillImageBorder;
import nextapp.echo2.app.Insets;
import nextapp.echo2.app.Label;
import nextapp.echo2.app.ResourceImageReference;
import nextapp.echo2.app.Row;
import nextapp.echo2.app.SelectField;
import nextapp.echo2.app.SplitPane;
import nextapp.echo2.app.Table;
import nextapp.echo2.app.TextField;
import nextapp.echo2.app.WindowPane;
import nextapp.echo2.app.event.ActionEvent;
import nextapp.echo2.app.event.ActionListener;
import nextapp.echo2.app.filetransfer.Download;
import nextapp.echo2.app.filetransfer.DownloadProvider;
import nextapp.echo2.app.list.DefaultListModel;
import nextapp.echo2.app.table.DefaultTableModel;
import nextapp.echo2.app.table.TableModel;
import nextapp.echo2.extras.app.CalendarSelect;
import nextapp.echo2.webrender.WebRenderServlet;
import org.sapra.dep.conexion.DAC_Ext;
import org.sapra.dep.conexion.DAC_Insert;
import org.sapra.dep.conexion.DAC_Update;
import org.sapra.dep.conexion.DBWRAP;

import org.sapra.Prefactura.PrefacturaMO;
import org.sapra.dao.BanorteCuentas;
import org.sapra.dao.Empresa;
import org.sapra.dep.*;
import org.sapra.dep.Usuario;
import org.sapra.echo.Helpers;
import org.sapra.echo.wAviso;
import org.sapra.logon.dLogin;
import org.sapra.main.vPrincipal;

/**
 *
 * @author  Luis Guerrero
 */
public class DispersionPane extends nextapp.echo2.app.ContentPane{
    vPrincipal princ;
       static String DIR_IMAGEN="org/sapra/echo/image/";

        public DispersionPane(vPrincipal princ) {
        super();
        this.princ=princ;
        Contenedor();
    }
     public DispersionPane() {
        Contenedor();
    }
      private WindowPane /*HeaderW*/Body,lista_Empresa,Empresa_Select,
              Bot_Seleccion1,Bot_Seleccion2,Footer,PantCuenta,wp_Calendar;
      private TextField fechaPago=new TextField();
      private Table Empresa_Tabla1,Empresa_Tabla2;
      private Button agregar,quitar,bCalendar;
      private Usuario m_usuario;
      private PrefacturaMO pmodel;
      private Button mov1_tb_1,mov1_tb_2,mov_todo_tb1,mov_todo_tb2,DispersionFinal,Practicante;
      private CalendarSelect cal_Select=new CalendarSelect();
      private String fecha_Pago,fecha_Dispersion;
      private ArrayList<CalendarioFacturacion> listaPeriodos=new ArrayList<CalendarioFacturacion>();
      private ArrayList<CalendarioFacturacion> listaTabla2=new ArrayList<CalendarioFacturacion>();
      private Button Mas,Menos;
      private TextField Counter=new TextField();
      private int numeroCont=99;
      private DBWRAP pdb;
      //private String numcuenta, tarjeta1;
      Practicante pac=new Practicante();
      //private String salida="";


      public void Contenedor(){

            DAC_Ext ext=new DAC_Ext();
            ContentPane pn=new ContentPane();
            ContentPane pn1=new ContentPane();
            ContentPane pn2=new ContentPane();
            Column col=new Column();
            Row fPago,rFecha,rLinea1;

            PrefacturaMO pmodel=new PrefacturaMO();
            //Obtiene de la sesion el id usuario y de la empresa
            String idUser = (String)WebRenderServlet.getActiveConnection().getRequest().getSession().getAttribute("_user2");
            String empresa = (String)WebRenderServlet.getActiveConnection().getRequest().getSession().getAttribute("fk_empresaId");

            Usuario us=new Usuario();

            Body=Helpers.Ventana(Color.WHITE,new Extent(40),new Extent(60),new Extent(1190),new Extent(500),false,false,new Extent(0));
            Body.setBorder(new FillImageBorder(Color.BLACK, new Insets(new Extent(0)), new Insets(new Extent(0)) ));
            Body.setPositionY(new Extent(70));
            Body.setBackgroundImage(new FillImage(new ResourceImageReference(DIR_IMAGEN + "fondo.jpg")));
            lista_Empresa=Helpers.Ventana(Color.WHITE,new Extent(50),new Extent(100),new Extent(470),new Extent(300),false,false,new Extent(20));
            Empresa_Select=Helpers.Ventana(Color.WHITE,new Extent(650),new Extent(100),new Extent(470),new Extent(300),false,false,new Extent(20));
            Bot_Seleccion1=Helpers.Ventana(Color.WHITE,new Extent(535),new Extent(170),new Extent(100),new Extent(60),false,false,new Extent(0));
            Bot_Seleccion2=Helpers.Ventana(Color.WHITE,new Extent(535),new Extent(270),new Extent(100),new Extent(60),false,false,new Extent(0));
            Footer=Helpers.Ventana(Color.WHITE,new Extent(650),new Extent(430),new Extent(470),new Extent(100),false,false,new Extent(0));
            lista_Empresa.setTitle("Empresas Disponibles");
            lista_Empresa.setTitleBackgroundImage(new FillImage(new ResourceImageReference(DIR_IMAGEN+"fondo_titulo2.jpg")));

            Empresa_Select.setTitle("Empresas Seleccionadas para Dispersion");
            Empresa_Select.setTitleBackgroundImage(new FillImage(new ResourceImageReference(DIR_IMAGEN+"fondo_titulo2.jpg")));

            lista_Empresa.setMovable(false);
            Empresa_Select.setMovable(false);
            Bot_Seleccion1.setMovable(false);
            Bot_Seleccion2.setMovable(false);
            Footer.setMovable(false);

            Bot_Seleccion1.setBackground(new Color(186,196,255));
            Bot_Seleccion2.setBackground(new Color(180,190,255));
            Footer.setBackground(new Color(163,173,255));

            SimpleDateFormat spd=new SimpleDateFormat("yyyy-MM-dd");
            Date fechaActual=new Date();
            fecha_Pago=spd.format(fechaActual);
            
            Date fechaCal=new Date();
            Calendar calMO=Calendar.getInstance();
            calMO.setTime(fechaActual);
            int dia=calMO.get(Calendar.DAY_OF_WEEK);
            if(dia==6){
                   long lf=fechaActual.getTime()+(3000*60*60*24);
                   fechaCal.setTime(lf);
                   fecha_Dispersion=spd.format(fechaCal);
             }else{
                   long lf=fechaActual.getTime()+(1000*60*60*24);
                   fechaCal.setTime(lf);
                   fecha_Dispersion=spd.format(fechaCal);
              }



            //
            fechaPago.setText(ext.fechaLarga(fecha_Pago));
            //Esconde los bordes de las pantallas
            Bot_Seleccion1.setBorder(new FillImageBorder(Color.WHITE, new Insets(0), new Insets(0)));
            Bot_Seleccion2.setBorder(new FillImageBorder(Color.WHITE, new Insets(0), new Insets(0)));
            Footer.setBorder(new FillImageBorder(Color.WHITE, new Insets(0), new Insets(0)));
           
            // Rows de la Pantalla
            fPago=Helpers.rowTextField("Fecha de Pago: ", 2, fechaPago, 2);
            bCalendar=Helpers.botonesMenu("Seleccion", 20, 100, new Color(255,215,0), Color.WHITE);
            bCalendar.setBackgroundImage(new FillImage(new ResourceImageReference(DIR_IMAGEN + "fondo_titulo2.jpg")));
            
            rLinea1=new Row();
            rFecha=new Row();
            rFecha.add(bCalendar);
            rLinea1.add(fPago);
            rLinea1.add(rFecha);
            rLinea1.setInsets(new Insets(50, 50));
            rLinea1.setCellSpacing(new Extent(10));
            //Modelo de la Tabla
            Empresa_Tabla1=Helpers.compTable();
            Empresa_Tabla1.setWidth(new Extent(450,Extent.PX));
            Empresa_Tabla1.setModel(tablaEmpresas());

            Empresa_Tabla2=Helpers.compTable();
            Empresa_Tabla2.setWidth(new Extent(450,Extent.PX));
            Empresa_Tabla2.setModel(recargaTabla(listaTabla2));



            pn1.add(Empresa_Tabla1);
            pn2.add(Empresa_Tabla2);

            //HeaderW.add(new Header(Integer.parseInt(idUser),Integer.parseInt(empresa)));

            Bot_Seleccion1.add(panelBotones());
            Bot_Seleccion2.add(panelBotones2());
            Footer.add(panelFooter());

            Column c=new Column();
            
            lista_Empresa.add(pn1);
            Empresa_Select.add(pn2);

            pn.add(lista_Empresa);
            pn.add(Empresa_Select);
            pn.add(Bot_Seleccion1);
            pn.add(Bot_Seleccion2);
            pn.add(Footer);
            //Button but=new Button("prueba");
            col.add(rLinea1);
            pn.add(col);
            Body.add(pn);
            c.add(princ.getMenu());
            //c.add(Body);

            add(Body);
            add(c);

            setVerticalScroll(new Extent(800));

            acciones();



            //setBackground(new Color(70,130,180));
            setBackgroundImage(new FillImage(new ResourceImageReference(DIR_IMAGEN + "fondo.jpg")));

    }
      
      // Inicio Panel de Calendario

        public ContentPane Calendario(){
        ContentPane cp=new ContentPane();
        Column c=new Column();
        Row linea1=new Row();
        Row linea2=new Row();
        cal_Select.setBackground(new Color(224,255,255));
        cal_Select.setForeground(Color.BLACK);
        cal_Select.setSelectedDateBackground(new Color(255,215,0));
        cal_Select.setSelectedDateForeground(Color.BLUE);


        Button sel_FechaPago=new Button("Seleccion de Fecha");
        sel_FechaPago.setBackground(new Color(210,180,140));
        sel_FechaPago.setBorder(new Border(1, Color.BLACK, 1));
        sel_FechaPago.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                try {
                         DAC_Ext ext=new DAC_Ext();
                         Date fechaCal=new Date();
                         Date Today=new Date();
                         SimpleDateFormat spd=new SimpleDateFormat("yyyy-MM-dd");
                         fecha_Pago=spd.format(cal_Select.getDate());
                         Calendar calMO=Calendar.getInstance();
                         calMO.setTime(Today);
                         int dia=calMO.get(Calendar.DAY_OF_WEEK);
                         if(dia==6){
                             long lf=Today.getTime()+(3000*60*60*24);
                             fechaCal.setTime(lf);
                             fecha_Dispersion=spd.format(fechaCal);
                         }else{
                             long lf=Today.getTime()+(1000*60*60*24);
                             fechaCal.setTime(lf);
                             fecha_Dispersion=spd.format(fechaCal);
                         }
                         listaPeriodos=new ArrayList<CalendarioFacturacion>();
                         listaTabla2=new ArrayList<CalendarioFacturacion>();
                          //System.out.println("Fecha de Pago "+fecha_Pago +"  y la fecha de dispersion"+fecha_Dispersion);
                         Empresa_Tabla1.setModel(tablaEmpresas());
                         Empresa_Tabla2.setModel(recargaTabla(listaTabla2));
                         fechaPago.setText(ext.fechaLarga(fecha_Pago));
                         Body.setEnabled(true);
                          wp_Calendar.userClose();
                         
                } catch (Exception exc) {
                }



            }
        });
        //sel_FechaPago.setBackground(Color.)
        linea1.add(cal_Select);
        linea2.add(sel_FechaPago);
        linea1.setAlignment(Alignment.ALIGN_CENTER);
        linea2.setAlignment(Alignment.ALIGN_CENTER);
        c.add(linea1);
        c.add(linea2);

        cp.add(c);

        return cp;
    }

       // fin Panel de Calendario
      public ContentPane panelBotones(){
          ContentPane cp=new ContentPane();
          Column c=new Column();



          Row r1=new Row();
          Row r2=new Row();
          r1.setAlignment(Alignment.ALIGN_CENTER);
          r2.setAlignment(Alignment.ALIGN_CENTER);
          mov1_tb_1=Helpers.botonesMenu("<", 20, 50, new Color(30,144,255), Color.WHITE);
          mov1_tb_1.setBackgroundImage(new FillImage(new ResourceImageReference(DIR_IMAGEN + "fondo_titulo2.jpg")));
          /*mov1_tb_1=Helpers.Button2("<", null);
          mov1_tb_1.setHeight(new Extent(20, Extent.PX));
          mov1_tb_1.setWidth(new Extent(25, Extent.PX));*/
          mov1_tb_2=Helpers.botonesMenu(">", 20, 50,new Color(30,144,255), Color.WHITE);
          mov1_tb_2.setBackgroundImage(new FillImage(new ResourceImageReference(DIR_IMAGEN + "fondo_titulo2.jpg")));
          /*mov1_tb_2=Helpers.Button2(">", null);
          mov1_tb_2.setHeight(new Extent(20, Extent.PX));
          mov1_tb_2.setWidth(new Extent(25, Extent.PX));*/

          r1.add(mov1_tb_1);
          r2.add(mov1_tb_2);
          c.add(r1);
          c.add(r2);

          cp.add(c);

          return cp;
      }
      public ContentPane panelBotones2(){
          ContentPane cp=new ContentPane();
          Column c=new Column();



          Row r1=new Row();
          Row r2=new Row();
          r1.setAlignment(Alignment.ALIGN_CENTER);
          r2.setAlignment(Alignment.ALIGN_CENTER);
          mov_todo_tb1=Helpers.botonesMenu("<<", 20, 50, new Color(30,144,255), Color.WHITE);
          mov_todo_tb1.setBackgroundImage(new FillImage(new ResourceImageReference(DIR_IMAGEN + "fondo_titulo2.jpg")));
          mov_todo_tb2=Helpers.botonesMenu(">>", 20, 50,new Color(30,144,255), Color.WHITE);
          mov_todo_tb2.setBackgroundImage(new FillImage(new ResourceImageReference(DIR_IMAGEN + "fondo_titulo2.jpg")));
          r1.add(mov_todo_tb1);
          r2.add(mov_todo_tb2);

          c.add(r1);
          c.add(r2);

          cp.add(c);

          return cp;
      }
      public ContentPane panelFooter(){

          ContentPane cp=new ContentPane();
          Column c=new Column();
          Row r1=new Row();
          Row r2=new Row();
          DispersionFinal=Helpers.botonesMenu("Generar Dispersion", 20, 150, new Color(30,144,255), Color.WHITE);
          DispersionFinal.setBackgroundImage(new FillImage(new ResourceImageReference(DIR_IMAGEN + "fondo_titulo2.jpg")));
          //DispersionFinal=Helpers.Button2("Generar Dispersion", null);
          Practicante=Helpers.botonesMenu("Practicantes", 20, 110, new Color(30,144,255), Color.WHITE);
          Practicante.setBackgroundImage(new FillImage(new ResourceImageReference(DIR_IMAGEN + "fondo_titulo2.jpg")));
          //Practicante=Helpers.Button2("Practicantes", null);
          Mas=Helpers.botonesMenu("+", 15, 15, new Color(30,144,255), Color.WHITE);
          Menos=Helpers.botonesMenu("-", 15, 15, new Color(30,144,255), Color.WHITE);
            Counter.setHeight(new Extent(15));
            Counter.setWidth(new Extent(20));
            Counter.setText(""+numeroCont);
            Counter.setMaximumLength(2);
            Counter.setEnabled(false);
            Mas.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                    if(numeroCont!=99 &&numeroCont<99){
                        numeroCont++;
                        Counter.setText(""+numeroCont);

                    }else{

                    }
                }
            });
            Menos.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                    if(numeroCont!=0 &&numeroCont>0){
                        numeroCont--;
                        Counter.setText(""+numeroCont);
                    }
                }
            });
          r1.add(Practicante);
          
          r1.add(DispersionFinal);
          r1.setCellSpacing(new Extent(20));
          r2.add(new Label("No. Siguiente de la Dispersion:"));
          r2.add(Mas);
          r2.add(Counter);
          r2.add(Menos);
          r2.setCellSpacing(new Extent(5));
          c.add(r1);
          c.add(r2);
          cp.add(c);
          return cp;
      }
      public void acciones(){
          mov1_tb_2.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                CalendarioFacturacion cf=null;
                cf=new CalendarioFacturacion();
                int num=Empresa_Tabla1.getSelectionModel().getMinSelectedIndex();
                if(listaPeriodos.size()>0){
                            if(num!=-1){
                                    cf=(CalendarioFacturacion)listaPeriodos.get(num);
                                    listaTabla2.add(cf);
                                    listaPeriodos.remove(num);
                                    Collections.sort(listaPeriodos);
                                    Collections.sort(listaTabla2);
                                    Empresa_Tabla1.setModel(recargaTabla(listaPeriodos));
                                    Empresa_Tabla2.setModel(recargaTabla(listaTabla2));
                                    Empresa_Tabla1.getSelectionModel().setSelectedIndex(num, true);
                            }else{
                                    add(new wAviso("Advertencia", "Favor de Seleccionar una Empresa"));
                            }
                } else{
                                    add(new wAviso("Advertencia", "No Existe una Empresa que Seleccionar"));
                            }
               

            }
            List lista123=(List)listaTabla2;
        });
          mov1_tb_1.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
               CalendarioFacturacion cf=null;
                cf=new CalendarioFacturacion();
                int num=Empresa_Tabla2.getSelectionModel().getMinSelectedIndex();
                if(listaTabla2.size()>0){
                        if(num!=-1 ){
                                cf=(CalendarioFacturacion)listaTabla2.get(num);
                                listaPeriodos.add(cf);
                                listaTabla2.remove(num);
                                Collections.sort(listaPeriodos);
                                Collections.sort(listaTabla2);
                                Empresa_Tabla1.setModel(recargaTabla(listaPeriodos));
                                Empresa_Tabla2.setModel(recargaTabla(listaTabla2));
                                Empresa_Tabla2.getSelectionModel().setSelectedIndex(num, true);
                        }else{
                            //add(new wAviso("Advertencia", "Favor de Seleccionar una Empresa"));

                            add(new wAviso("Advertencia", dLogin.getUser().getNombre().toString()));
                        }
                }else{
                                    add(new wAviso("Advertencia", "No Existe una Empresa que Seleccionar"));
                      }
                 
            }
        });
          mov_todo_tb1.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                int num1=Empresa_Tabla1.getSelectionModel().getMinSelectedIndex();
                int num2=Empresa_Tabla2.getSelectionModel().getMinSelectedIndex();
                ArrayList<CalendarioFacturacion> nueva=new ArrayList<CalendarioFacturacion>();
                nueva.addAll(listaPeriodos);
                nueva.addAll(listaTabla2);
                Collections.sort(nueva);
                listaPeriodos=nueva;
                listaTabla2.clear();
                listaTabla2=new ArrayList<CalendarioFacturacion>();

                Empresa_Tabla1.setModel(recargaTabla(listaPeriodos));
                Empresa_Tabla2.setModel(recargaTabla(listaTabla2));

            }
        });
        //todo de la tabla 1 a la 2
          mov_todo_tb2.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                int num1=Empresa_Tabla1.getSelectionModel().getMinSelectedIndex();
                int num2=Empresa_Tabla2.getSelectionModel().getMinSelectedIndex();
                 ArrayList<CalendarioFacturacion> nueva=new ArrayList<CalendarioFacturacion>();
                nueva.addAll(listaPeriodos);
                nueva.addAll(listaTabla2);
                Collections.sort(nueva);
                listaTabla2=nueva;
                listaPeriodos.clear();
                listaPeriodos=new ArrayList<CalendarioFacturacion>();
                Empresa_Tabla1.setModel(recargaTabla(listaPeriodos));
                Empresa_Tabla2.setModel(recargaTabla(listaTabla2));

                
            }
        });
          DispersionFinal.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                
                try {
     
                    ArrayList<Practicante> listaPracticante=new ArrayList<Practicante>();
                    
                    PrefacturaMO prefactura=new PrefacturaMO();
                    DAC_Ext ext=new DAC_Ext();
                    org.sapra.dao.Usuario us1=dLogin.getUser();
                    m_usuario=new Usuario();
                    m_usuario.id=us1.getUsuarioId();
                    m_usuario.login=us1.getLogin();
                    m_usuario.nombre=us1.getNombre();
                    m_usuario.tipo=us1.getTipoUsuario();

                    for(int i=0;i<listaTabla2.size();i++){
                             CalendarioFacturacion cf=new CalendarioFacturacion();
                             cf=(CalendarioFacturacion)listaTabla2.get(i);
                             Empresa emp=dLogin.getEmpresa2(cf.getFk_empresaId());
                             org.sapra.dao.Periodo periodoDisp=prefactura.getPeriodo(cf.getCalendarioFacturacionPracticantesId());
                                   TableModel dummy=prefactura.InitFactura(emp, periodoDisp);

                                   if(!prefactura.isCerrada()){
                                            String negativos = prefactura.isNetoNegativo();

                                            if(negativos != null)
                                            {
                                                    
                                                    continue;
                                            }

                                            if(!prefactura.Autorizar(m_usuario, periodoDisp))
                                            {
                                                    
                                                    continue;
                                            }else
                                            {
                                                    
                                                    dummy  = prefactura.InitFactura( dLogin.getEmpresa(), periodoDisp);
                                            }
                                   }

                                    List<Practicante> practicantes = prefactura.getPracticantes();
                                    

                                    if(practicantes.isEmpty()){
                                        add(new wAviso("Advertencia","Empresa sin practicantes vigentes"));
                                    }

                                    for(Iterator it = practicantes.iterator();it.hasNext();)
                                    {

                                            
                                            Practicante p = (Practicante) it.next();
                                                  
                                            if(p.neto < 1) continue;

                                            else{
                                                p.fk_empresaId=cf.getFk_empresaId();
                                                listaPracticante.add(p);
                                               
                                            }
                                    }
                       }
                       DecimalFormat nf = new DecimalFormat("########.00");
                       ArrayList<PractCuenta> listaPracCuenta=new ArrayList<PractCuenta>();
                       for(int j=0;j<listaPracticante.size();j++){
                                 PractCuenta pc=new PractCuenta();
                                 Practicante c=(Practicante)listaPracticante.get(j);
                                 pc=new PractCuenta();
                                 pc.setPracticanteId(c.id);
                                 if(c.fechaCancelacion==null)
                                            pc.setFec_cancelacion("");
                                 else
                                            pc.setFec_cancelacion(c.fechaCancelacion.toString());
                                 pc.setFec_iniciocontrato(c.fechaInicio.toString());
                                 pc.setFec_terminocontrato(c.fechaTermino.toString());
                                 pc.setNombre(c.nombre);
                                 pc.setPaterno(c.paterno);
                                 pc.setMaterno(c.materno);
                                 pc.setSueldo(""+c.sueldo);
                                 pc.setNeto(c.neto);
                                 pc.setApagar(c.apagar);
                                 pc.setFk_empresaId(c.fk_empresaId);
                                 BanorteCuenta bc=ext.banorteCuenta_Disp(c.id);
                                 if(bc==null || bc.getNumCuenta().trim().equals("")){
                                      add(new wAviso("Error En Cuenta","El Practicante "+c.toString()+" no tiene una cuenta asociada"));
                                      return;
                                 }else{
                                     pc.setNumCuenta(bc.getNumCuenta());
                                     pc.setNumTarjeta(bc.getNumTarjeta());
                                     listaPracCuenta.add(pc);
                                     
                                 }
                                     

                             }
                       LogicClass lc=new LogicClass();
                       Double suma=0.0;
                       ArrayList<String> lineas=new ArrayList<String>();
                        String cadHead="";
                       if(listaPracticante.size()>0){
                            EmpresaMO emp=new EmpresaMO();
                            String[] fHead=fecha_Dispersion.trim().split("-");
                            String fProceso=fHead[0]+""+fHead[1]+""+fHead[2];
                            RespDispersionHeader header=new RespDispersionHeader();
                            header.setIdRespDispersionHeader(0);
                            header.setFechaProceso(fProceso);
                            header.setConsecutivo(""+numeroCont);
                            header.setNumRegistros(lc.cad1(""+listaPracticante.size(), 6, 2, 0));

                            for(int i=0;i<listaPracCuenta.size();i++){
                                                           
                                       PractCuenta rr=new PractCuenta();
                                       rr=(PractCuenta)listaPracCuenta.get(i);
                                       ResDispersionRow newRow=new ResDispersionRow();
                                       newRow.setRespDispersionRow(0);
                                       newRow.setFkRespDispersionHeader(0);
                                       newRow.setNumeroEmpleado(""+rr.getPracticanteId());
                                       newRow.setNumCuenta(rr.getNumCuenta());
                                       newRow.setAccion(" ");
                                       newRow.setImporte(""+rr.getNeto());
                                       newRow.setFechaAplicacion(fProceso);
                                       Double sumaAux=rr.getNeto();
                                       
                                       suma+=sumaAux;
                                      
                                       System.out.println(i+rr.getNombre()+rr.getSueldo()+rr.getApagar());
                                       
                                       emp=ext.empresa(rr.getFk_empresaId());
                                       String cad=lc.cadenaDispRow(newRow,emp.getFk_bancoId());
                                       lineas.add(cad);
                           }
                           header.setImporteTotal(lc.cad1(""+suma, 15, 2, 1));
                           header.setImpTotalAlta(lc.cad1(" ", 15, 2, 1));
                           header.setFk_usuario(m_usuario.id);
                           cadHead=lc.cadenaDispHeader(header);
                           String nameFile="NI34954"+header.getConsecutivo()+".PAG";
                           File f=new File(nameFile);
                           f.createNewFile();
                           BufferedWriter bw=new BufferedWriter(new FileWriter(f));
                           bw.write(cadHead);
                           bw.newLine();
                           for(int i=0;i<lineas.size();i++){
                                       String x=(String)lineas.get(i);
                                       bw.write(x);
                                       bw.newLine();
                           }
                           bw.flush();
                           bw.close();
                           final byte[] content = new byte[(int) f.length()];
                           FileInputStream inputStream = new FileInputStream(f);
                           inputStream.read(content);
                           inputStream.close();
                           final String fname=f.getName();
                           Download archivo=new Download();
                           archivo.setProvider(new DownloadProvider() {

                                public String getContentType() {
                                            return ".PAG";
                                        }

                                        public String getFileName() {
                                            return fname;
                                        }

                                        public int getSize() {
                                            return 0;
                                        }

                                        public void writeFile(OutputStream out) throws IOException {
                                            out.write(content);
                                        }

                            public void writeFile(java.io.OutputStream out) throws IOException {
                                throw new UnsupportedOperationException("Not supported yet.");
                            }
                                    });
                           archivo.setActive(true);
                           ApplicationInstance app = ApplicationInstance.getActive();
                           app.getActive().enqueueCommand(archivo);

                           add(new wAviso("Proceso Exitoso", "Dispersion Generada Correctamente, Monto total dispersado :"+nf.format(suma)));
                           
                       }
                } catch (Exception ex) {
                     add(new wAviso("Error", "Error Ocurrido Internamente Favor de Contactar al Personal del Sistema"));
                }
            }
        });
          Practicante.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {

                if(listaTabla2.size()>0){
                    PantCuenta=Helpers.Ventana(Color.WHITE,new Extent(40),new Extent(110),new Extent(1190),new Extent(500),false,false,new Extent(30));
                    PantCuenta.setTitleBackgroundImage(new FillImage(new ResourceImageReference(DIR_IMAGEN+"fondo_titulo2.jpg")));
                    //PantCuenta.setBackground(new Color(180,190,255));
                    PantCuenta.setClosable(true);
                    PantCuenta.setMovable(false);
                    PantCuenta.setTitle("Asignacion de Cuenta");
                    PantCuenta.setPositionY(new Extent(24));
                    ContentPane cp=PantallaCuenta();
                    PantCuenta.add(cp);
                    add(PantCuenta);
                }else{
                     add(new wAviso("Advertencia", "Favor De Seleccionar Una Empresa"));
                }
                
            }
        });
          bCalendar.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {

                wp_Calendar=Helpers.Ventana(Color.WHITE,new Extent(50),new Extent(100),new Extent(200),new Extent(190),false,false,new Extent(20));
                wp_Calendar.setTitle("Fecha de Pago");
                wp_Calendar.add(Calendario());
                cal_Select.setDate(new Date());
                Body.setEnabled(false);
                add(wp_Calendar);
            }
        });
          practEmpresa.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                practCuenta.setModel(infoPract());

            }
        });

      }

      private TextField Cuenta,No_Tarjeta;
      private SelectField practEmpresa=new SelectField();
      private Button Guardar;
      private SplitPane Header,Split1,Split2,Split3;
      private Table practCuenta;
      public ContentPane PantallaCuenta(){
          WindowPane pant1,pant2;

          DAC_Ext ext=new DAC_Ext();
          ContentPane cp=new ContentPane();

          ContentPane nuevo=new ContentPane();
          ContentPane nuevo2=new ContentPane();
          Column col=new Column();
          Row r1=new Row();
          Row r2=new Row();
          Row r3=new Row();
          pant1=Helpers.Ventana(Color.WHITE,new Extent(200),new Extent(10),new Extent(700),new Extent(100),false,false,new Extent(0));
          pant2=Helpers.Ventana(Color.WHITE,new Extent(200),new Extent(120),new Extent(700),new Extent(300),false,false,new Extent(0));
          pant1.setBorder(new FillImageBorder(Color.WHITE, new Insets(0), new Insets(0)));
          pant2.setBorder(new FillImageBorder(Color.WHITE, new Insets(0), new Insets(0)));

          nuevo.setBackground(Color.CYAN);
          nuevo2.setBackground(Color.GREEN);
          pant1.add(nuevo);
          pant2.add(nuevo2);

          cp.add(pant1);
          cp.add(pant2);
          cp.setBackground(new Color(230,230,250));
          Guardar=Helpers.botonesMenu("Guardar", 20, 70,new Color(30,144,255), Color.WHITE);



          Cuenta=Helpers.textLabels(140,9,true);
          No_Tarjeta=Helpers.textLabels(140,16,true);
          practEmpresa.setModel(listaComboEmp());
          practEmpresa.setSelectedIndex(-1);
          r1.add(new Label("Empresa:"));
          r1.add(practEmpresa);
          r2.add(new Label("Cuenta:"));
          r2.add(Cuenta);
          r2.add(new Label("No Tarjeta:"));
          r2.add(No_Tarjeta);
          r3.add(Guardar);
          r1.setInsets(new Insets(2));
          r2.setInsets(new Insets(2));
          r3.setInsets(new Insets(2));
          r1.setCellSpacing(new Extent(5));r1.setAlignment(Alignment.ALIGN_CENTER);
          r2.setCellSpacing(new Extent(5));r2.setAlignment(Alignment.ALIGN_CENTER);
          r3.setCellSpacing(new Extent(5));r3.setAlignment(Alignment.ALIGN_CENTER);

          Column col2=new Column();
          Row r21=new Row();

          practCuenta=Helpers.compTable();
          practCuenta.setWidth(new Extent(660,Extent.PX));
          practCuenta.setModel(infoPract());
          r21.add(practCuenta);
          r21.setAlignment(Alignment.ALIGN_CENTER);
          col2.add(r21);

          col.add(r1);
          col.add(r2);
          col.add(r3);
          col.setInsets(new Insets(5));
          nuevo.add(col);
          nuevo2.add(col2);
          nuevo.setBackground(new Color(245,245,220));
          nuevo2.setBackground(new Color(230,230,250));
          Guardar.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                DAC_Ext ext=new DAC_Ext();
                DAC_Update di=new DAC_Update();
                Long tarjeta;
                /*numcuenta=Cuenta.getText();
                tarjeta1=No_Tarjeta.getText();*/
                if(practEmpresa.getSelectedIndex()!=-1){
                        if(practCuenta.getSelectionModel().getMinSelectedIndex()!=-1){
                            Practicante p=(Practicante)practicantes.get(practCuenta.getSelectionModel().getMinSelectedIndex());
                            //if(!Cuenta.getText().trim().equals(p.cuenta)){
                                System.out.println(Cuenta.getText()+""+p.cuenta);
                            if(!Cuenta.getText().trim().equals("")){
                                try {
                                    Long cuenta=Long.parseLong(Cuenta.getText());
                                    if(!No_Tarjeta.getText().trim().equals(""))
                                             tarjeta=Long.parseLong(No_Tarjeta.getText());
                                } catch (Exception exc) {
                                    add(new wAviso("Advertencia", "Formato de Cuenta o Tarjeta Incorrecto"));
                                    return;
                                }

                               CalendarioFacturacion cfx=(listaTabla2).get(practEmpresa.getSelectedIndex());
                                 EmpresaMO empresa=ext.empresa(cfx.getFk_empresaId());
                                  if(empresa.getFk_bancoId()==1)
                                      if(Cuenta.getText().trim().length()!=9){
                                          add(new wAviso("Advertencia","Formato Para Cuenta Banorte Incorrecto, Longitud debe ser de 9 Caracteres"));
                                          return;
                                      }
                                  if(empresa.getFk_bancoId()==3)
                                      if(Cuenta.getText().trim().length()!=17){
                                          add(new wAviso("Advertencia","Formato Para Cuenta HSBC Incorrecto, Longitud debe ser de 17 Caracteres"));
                                          return;
                                      }
                                if((No_Tarjeta.getText().trim().equals(""))||(No_Tarjeta.getText().trim().length()!=16))
                                    di.updateCuenta(p.id,Cuenta.getText(),No_Tarjeta.getText(), 1);
                                else
                                    di.updateCuenta(p.id,Cuenta.getText(),No_Tarjeta.getText(), 3);

                                int lastnum=practCuenta.getSelectionModel().getMinSelectedIndex();
                                practCuenta.setModel(infoPract());
                                practCuenta.getSelectionModel().setSelectedIndex(lastnum, true);

                                Cuenta.setText("");
                                No_Tarjeta.setText("");

                                
                            }else{
                                 add(new wAviso("Advertencia", "Inserte Una Cuenta"));
                             }

                        /*}else{
                             add(new wAviso("Advertencia", "Cuentas repetidas"));
                        }*/


                        }else{
                            add(new wAviso("Advertencia", "Favor de Seleccionar un Practicante"));
                        }
                }else{
                    add(new wAviso("Advertencia", "Favor de Seleccionar una Empresa"));
                }
            }

        });
          return cp;
      }
      
    /*Modelo Para las Empresas*/

      public DefaultListModel listaComboEmp(){
          DefaultListModel lme = new DefaultListModel();
          CalendarioFacturacion cf=null;
           for(int i=0;i<listaTabla2.size();i++){
               cf=(CalendarioFacturacion)listaTabla2.get(i);
               lme.add(cf.getEmpresa());
           }


          return lme;
      }
      public DefaultTableModel recargaTabla(ArrayList<CalendarioFacturacion> lista){
          DefaultTableModel dtm=new DefaultTableModel(1,0);
          CalendarioFacturacion cf=null;
          Object[] obj=new Object[3];
           dtm.setColumnName(0, "Razon Social");
          for(int i=0;i<lista.size();i++){
                cf=(CalendarioFacturacion)lista.get(i);
                obj=new Object[3];
                //obj[0]=cf.getFk_empresaId();
                obj[0]=cf.getEmpresa();
                dtm.addRow(obj);
        }
          return dtm;
      }
      public DefaultTableModel tablaEmpresas(){
        DefaultTableModel dtm=new DefaultTableModel(1,0);
        CalendarioFacturacion cf=null;
        Object[] obj=new Object[3];
        DAC_Ext ext=new DAC_Ext();
        DAC_Insert di=new DAC_Insert();


        dtm.setColumnName(0, "Razon Social");

        listaPeriodos=ext.periodos(fecha_Pago);
        for(int i=0;i<listaPeriodos.size();i++){
                cf=new CalendarioFacturacion();
                cf=(CalendarioFacturacion)listaPeriodos.get(i);
                obj=new Object[3];
                //obj[0]=cf.getFk_empresaId();
                obj[0]=cf.getEmpresa();
                dtm.addRow(obj);
        }
        //DAC_Update du=new DAC_Update();
        //du.updateTotalTempHeader(listaDispersionTempDt.size(), listaDispersionTempDtInactivo.size(), dH.getIdDispersionTemp());
        return dtm;
    }
      private List<Practicante> practicantes;
      private List<BanorteCuentas> cuentas;
      
      public DefaultTableModel infoPract(){//Modelo de Practicante con sus Cuentas
        DefaultTableModel dtm=new DefaultTableModel(4,0);
        CalendarioFacturacion cf=null;
        Object[] obj=new Object[4];
        DAC_Ext ext=new DAC_Ext();
        DAC_Insert di=new DAC_Insert();
        int seleccion=practEmpresa.getSelectedIndex();

        System.out.println(seleccion);
        if(seleccion==-1){
               //Cuenta.setMaximumLength(0);
        } else {
              CalendarioFacturacion cfx=(listaTabla2).get(seleccion);
              EmpresaMO empresa=ext.empresa(cfx.getFk_empresaId());
              if(empresa.getFk_bancoId()==1)
                  Cuenta.setMaximumLength(9);
              if(empresa.getFk_bancoId()==3)
                  Cuenta.setMaximumLength(17);

          }
        String title[]={"Nombre Practicante","Neto","Numero Cuenta","Numero Tarjeta"};

               for(int i=0;i<title.length;i++){
                   dtm.setColumnName(i,title[i]);
               }
        if(seleccion!=-1){
            cf=(CalendarioFacturacion)listaTabla2.get(seleccion) ;
            Empresa empNew=dLogin.getEmpresa2(cf.getFk_empresaId());
            PrefacturaMO prefactura=new PrefacturaMO();
            org.sapra.dao.Periodo periodoDisp=prefactura.getPeriodo(cf.getCalendarioFacturacionPracticantesId());
            TableModel dummy=prefactura.InitFactura(empNew, periodoDisp);
            //TableModel dummy=prefactura.InitFactura(dLogin.getEmpresa(), periodoDisp);
            
            practicantes = prefactura.getPracticantes();
            
            for(Iterator it = practicantes.iterator();it.hasNext();)
                                    {
                                            Practicante p = (Practicante) it.next();
                                            obj=new Object[4];
                                            org.sapra.dep.BanorteCuenta cuenta=ext.banorteCuenta(p.id);
                                            obj[0]=p.toString();
                                            obj[1]=p.neto;
                                            if(cuenta!=null){
                                                obj[2]=cuenta.getNumCuenta();
                                                obj[3]=cuenta.getNumTarjeta();
                                            }else{
                                                di.insertCuenta(p.id, Cuenta.getText(), No_Tarjeta.getText());
                                                /*System.out.println(numcuenta);
                                                System.out.println(tarjeta1);*/
                                                //di.insertCuenta(p.id);
                                                obj[2]="";
                                                obj[3]="";
                                                /*numcuenta="";
                                                tarjeta1="";*/
                                            }
                                            dtm.addRow(obj);
                                    }

        }



        return dtm;
    }
      //AGREGAR LA VENTANA AL WORK PANE PRINCIPAL
         public DBWRAP getPdb() {
        return pdb;
    }
             public void setPdb(DBWRAP pdb) {
        this.pdb = pdb;
    }
}
